package com.memora.seguranca


import org.springframework.security.access.annotation.Secured
import static org.springframework.http.HttpStatus.*
import grails.transaction.Transactional
import com.memora.usuario.Telefone
import grails.validation.ValidationException

@Secured(['ROLE_ADMIN'])
@Transactional(readOnly = true)
class SegUserController {

    def segUserService

    static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

    def index(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        respond SegUser.list(params), model:[segUserInstanceCount: SegUser.count()]
    }

    def show(SegUser segUserInstance) {

        def telefoneInstanceList = Telefone.findAllBySegUser(segUserInstance)

       [segUserInstance: segUserInstance, telefoneInstanceList: telefoneInstanceList]
        //respond segUserInstance
    }

    def create() {
        [segUserInstance: new SegUser(params), telefoneInstance: new Telefone(params)]
        //respond new SegUser(params), new Telefone(params)
    }

    @Transactional
    def save(params) {

        SegUser segUserInstance = new SegUser();

        try{
            segUserInstance = segUserService.saveService(params)
        }catch(ValidationException ){

             segUserInstance.errors.reject(
                'memora.message.erroaogravarteefone, memora.message.erropersistir',
                ['telefone'] as Object[],
                'Ocorreu um erro ao gravar o {0}. Se o problema persistir, contacte o administrador do sistema.')


            render(view: "create", model: [segUserInstance: segUserInstance, telefoneInstance: new Telefone()])  
        }

        if (segUserInstance == null) {
            notFound()
            return
        }

        if (segUserInstance.hasErrors()) {

            render(view: "create", model: [segUserInstance: segUserInstance, telefoneInstance: new Telefone()])  
        
            return
        }

        request.withFormat {
            form multipartForm {
                flash.message = message(code: 'default.created.message', args: [message(code: 'segUserInstance.label', default: 'SegUser'), segUserInstance.id])
                redirect(action: "show", id: segUserInstance.id)
                //redirect segUserInstance
            }
            '*' { respond segUserInstance, [status: CREATED] }
        }
    }

    def edit(SegUser segUserInstance) {

        def telefoneInstanceList = Telefone.findAllBySegUser(segUserInstance)

        [segUserInstance: segUserInstance, telefoneInstance: new Telefone(), telefoneInstanceList: telefoneInstanceList]
        //respond segUserInstance
    }

    @Transactional
    def update(SegUser segUserInstance) {

         try{
            segUserInstance = segUserService.updateService(segUserInstance, params)
        }catch(ValidationException e){
            
            segUserInstance.errors.reject(
                'memora.message.erroaogravarteefone, memora.message.erropersistir',
                ['telefone'] as Object[],
                'Ocorreu um erro ao gravar o {0}. Se o problema persistir, contacte o administrador do sistema.')


            render(view: "edit", model: [segUserInstance: segUserInstance, telefoneInstance: new Telefone()])  
        }


        if (segUserInstance == null) {
            notFound()
            return
        }

        if (segUserInstance.hasErrors()) {

            def telefoneInstanceList = Telefone.findAllBySegUser(segUserInstance)

            render(view: "edit", model: [segUserInstance: segUserInstance, telefoneInstance: new Telefone(), telefoneInstanceList: telefoneInstanceList])

            return
        }

        request.withFormat {
            form multipartForm {
                flash.message = message(code: 'default.updated.message', args: [message(code: 'SegUser.label', default: 'SegUser'), segUserInstance.id])
                redirect(action: "show", id: segUserInstance.id)
            }
            '*'{ respond segUserInstance, [status: OK] }
        }
    }

    @Transactional
    def delete(SegUser segUserInstance) {

        segUserInstance = segUserService.deleteService(segUserInstance)

        if (segUserInstance == null) {
            notFound()
            return
        }

        request.withFormat {
            form multipartForm {
                flash.message = message(code: 'default.deleted.message', args: [message(code: 'SegUser.label', default: 'SegUser'), segUserInstance.id])
                redirect action:"index", method:"GET"
            }
            '*'{ render status: NO_CONTENT }
        }
    }

    protected void notFound() {
        request.withFormat {
            form multipartForm {
                flash.message = message(code: 'default.not.found.message', args: [message(code: 'segUserInstance.label', default: 'SegUser'), params.id])
                redirect action: "index", method: "GET"
            }
            '*'{ render status: NOT_FOUND }
        }
    }
}